package com.tinchos.core.persistencia;

import java.util.Iterator;

import org.jdom.Attribute;
import org.jdom.Element;

import com.tinchos.entidades.Carrera;
import com.tinchos.entidades.MateriaAprobada;
import com.tinchos.entidades.MateriaCursando;

public class CarreraDAO implements DAO {
	

	/* Instancia a partir de NodoXML */
	public Carrera getCarrera(Element nodo) {
		
		Carrera carrera = new Carrera();
		
		carrera.setCodigo(nodo.getAttributeValue("codigo"));
		carrera.setNombre(nodo.getAttributeValue("nombre"));

		Element aprobadas = nodo.getChild("materiasAprobadas");
		
		Iterator iter = aprobadas.getChildren("materiaAprobada").iterator();
		
		while (iter.hasNext()) {
			
			MateriaAprobada mat = new MateriaAprobada((Element) iter.next());
			carrera.agregarMateriaAprobada(mat);
			
		}
		
		Element cursando = nodo.getChild("materiasCursando");
		
		Iterator iter2 = cursando.getChildren("materiaCursando").iterator();
		
		while (iter2.hasNext()) {
			
			MateriaCursando mat = new MateriaCursando((Element) iter2.next());
			carrera.agregarMateriaCursando(mat);
			
		}

		return carrera;
		
	}
	
	/* NodoXML a partir de instancia */
	public Element obtenerNodo(Carrera carrera) {
		
		Element nodo = new Element("carrera");
		
		nodo.setAttribute(new Attribute("nombre", carrera.getNombre()));
		nodo.setAttribute(new Attribute("codigo", carrera.getCodigo()));
		
		/*Elemento para materias aprobadas*/
		Element aprobadas = new Element("materiasAprobadas");
		nodo.addContent(aprobadas);
		
		Iterator iter = carrera.getMateriasAprobadas().iterator();
		
		while (iter.hasNext()) {
			
			aprobadas.addContent(((MateriaAprobada) iter.next()).obtenerNodo());
			
		}
		
		/*Elemento para materias cursando*/
		Element cursando = new Element("materiasCursando");
		nodo.addContent(cursando);
		
		iter = carrera.getMateriasCursando().iterator();
		
		while (iter.hasNext()) {
			
			cursando.addContent(((MateriaCursando) iter.next()).obtenerNodo());
		
		}
		
		return nodo;
	}


}
